#============================================
# #知识点 
# 存储弓|擎就是不同的处理机制
# MySQL主要存储引擎
# ●Innodb
# 是MySQL5.5版本及之后默认的存储引擎
# 存储数据更加稳定
# ●myisam
# 是MySQL 5.5版本之前默认的存储引擎
# 速度比innodb要快，但是我们更加注重数据安全(不支持事务)
# ●memory
# 内存|擎(数据全部存放在内存中)断电数据丢失
# ●blackhole
# 无论存什么，都立刻消失()

#查看所有的存储引擎
# show engines ;
# #不同的存储引擎在存储表的时候 异同点
# create table t1(id int) engine=innodb;
# create tab1e t2(id int) engine=myisam;
# create table t3(id int) engine=blackhole;
# create table t4(id int) engine=memory; 

#============================================
#数据类型
# 创建表的完整用法
# create table 表名(字段名 类型(宽度) 约束,
#                   字段名 类型(宽度) 约束,
#                   字段名 类型(宽度) 约束,
#                   字段名 类型(宽度) 约束1 约束2)

#1、注意在同一张表内字段名不能重复,
#2、宽度和约束条件可写可不写，字段名与类型必须写,
#3、约束条件可以支持多个写
#4、最后一行不能加逗号

#宽度
# 一般是对存储数据的限制
# create table qwq(id char)；  默认宽度为1
# insert into qwq values(null)  null代表为空
# 针对不同的版本会出现不同的效果
# 5.6版本默认没有开启严格模式规定只能存一一个字符你给了多个字
# 符，那么我会自动帮你截取
# 5.7版本及以上或者开启了严格模式那么规定只能存几个就不能
# 超，一旦超出范围立刻报错Data too 1ong for ....
# '严格模式到底开不开呢? 开！
# MySQL5.7之后的版本默认都是开启严格模式的


#约束条件
# create table qwq(id int,name char(4) not null)
# insert into qwq values(1,null)  会报错
# 宽度和约束条件到底是什么关系
# 宽度是用来限制数据的存储
# 约束条件是在宽度的基础之上增加的额外的约束
#============================================
# 基本数据类型（针对创建表时操作！）
#整型
# tinyint smallint meduimint bigint int
#整形类型，默认都有符号可以在在后面加上约束unsigned代表无符号
#create table t1(id int unsigned)

#在表里添加数据，如果数据大于或者小于数据类型的最大值或者最小值，就会取它的极值

#宽度在数字类型中式特列，如果超出设置的宽度，没影响，存多少位就会显示多少位，到达极值，就显示极值
#如果没有超过，默认是以空格填充，这里可以加一个约束条件zerofiil就是以0去填充
# create table t1(id int unsigned zerofill)
# zerofill unsigned not null 基础约束
#总结:针对整型字段括号内无需指定宽度因为它默认的宽度以及足够显示所有的数据了
#============================================
# 浮点型(身高，体重，工资...)
# float,double,decimal
#存储限制
# f1oat(255,30)     总共255位小数部分占30位
# doub1e(255 ,30)   总共255位小数部分占30位
# decima1(65,30)    总共65位小数部分占30位 I
#精确度不同，看情况使用 float<doubel<decimal
#============================================
#字符类型
# char  定长 显示删除空格
# char(4)数据超过四个字符直接报错（严格模式下） 不够四个字符空格补全
# varchar  变长  显示不删除空格
# varchar(4)数据超过四个字符直接报错（严格模式下）  不够有几个存几个实际加一字节

#介绍一个小方法char_1ength统计字段长度
# select char_length(name) from t18;

#mysql在显示时，会自动剔除空格，需要修改配置
# 修改严格模式
# set session
# 只在当前窗口有效
# set g1oba1
# 全局有效
# set g1oba1 sq1_mode = ' STRICT_TRANS_TABLES,PAD_CHAR_TO_FULL_LENGYH';(第一个为修改严格模式，第二个为去除提出空格功能)
# 修改完之后重新进入服务端即可

# char
# 缺点:浪费空间
# 优点:存取都很简单
# 直接按照固定的字符存取数据即可
# jason egon alex wusir tank
# 存按照五个字符存取也直接按照五个字符取

# varchar
# 优点:节省空间
# 缺点:存取较为麻烦
# 1bytes+jason lbytes+egon lbytes+alex 1bytes+tank
# 存的时候需要制作报头
# 取的时候也需要先读取报头之后才能读取真实数据
#以前用char ,现在用varchar,建议用varchar
#============================================
#时间类型   
#date:年月日   被分别配到一个datetime 值会给时分秒赋值00:00:00
#datetime:年月日时分秒 被分配到一个date形式的值，会被删除因为为00:00:00
#time:天 时分秒  格式字符串形式加冒号是从时开始识别，不加从秒开始识别  取值范围-838:59:59-838:59:59 天和小时显示为小时 D=24*D+HH
#year:年 范围1901-2155 一般给字符串类型如果给数字00就会变0000，不是2000(给'00'是)。1-69(00年),70-99(19年)。
# create table t6(name char,brith_time date,study_time time,die year)
#============================================
#枚举与集合
# 枚举(enum)多选一
# 集合(set)多选多

#枚举
# create table t7(id int,name char(6),gender enum("fame","mel"));
# insert into t7 values(1,"fbh","fame");  只能在enum里选择一个

#集合
# create table t7(id int,name char(6),gender enum("fame","mel"),hoby set("read","swim","spots"));
# insert into t7 values(1,"fbh","fame","swim,read");  只能在set中，可以选多个
#============================================
# select date_ format(sub_ time, '%Y-%m')，count(id) from b1og group by
# date_ format(sub_ _time,'%Y-%m');I
